Vstup z klávesnice

V předcházejících lekcích jsme pro ovládání projektů nebo zadávání hodnot (např. čísel) využívali myš. Pro zadávání například delších textů (třeba jména hráče) je vhodnější zápis z klávesnice, proto existují ve všech programovacích jazycích také příkazy pro vstup z klávesnice.

Základními příkazy pro čtení z klávesnice v Imagine jsou:

readword (rw) - načtení slova (bez mezery), možno upravovat, čeká na ENTER
readchar (rc) - načtení znaku, načtený znak se nezobrazí, nečeká na potvrzení klávesou ENTER

S načtenými slovy nebo znaky bude potřeba provádět nějaké operace, proto je téměř vždy potřeba uložit je do nějaké proměnné, například:

make"a rw - do proměnné a se uloží slovo načtené z klávesnice
make"b rc - do proměnné b se uloží znak načtený z klávesnice

Hodnoty proměnných jsme v minulé lekci pomocí printtotextbox tiskli do textového pole, použili jsme příkazy:
print (pr) - tisk s odřádkováním
type - tisk bez odřádkování (připsání) , takže lze například psát:

print :a - neurčíme-li, do kterého textového pole má tisk proběhnout, použije se poslední použité textové pole nebo příkazový řádek
chceme-li tisknout více hodnot najednou, potom se musí příkaz print uzavřít celý do kulatých závorek, například:
(pr :a :b)


Další možnost využití klávesnice je ovládání objektů pomocí kláves, například při hrách. Pohyb objektů pomocí kláves lze zajistit více způsoby, například pomocí příkazu
readkey - čti kód klávesy,
například kódy kurzorových šipek jsou: -72 (nahoru), -80 (dolů), -77 (doprava), -75 (doleva)
Při tvorbě následujícího projektu KORUNY byl využit také příkaz:
key? - byla stisknuta klávesa?
Uvedené příkazy ale fungují jen když není aktivní Příkazový řádek (viz nabídka Nastavení) a když je zavřeno okno Paměť!

Projekt KORUNY

V této jednoduché hře budeme řídit želvičku tak, aby "posbírala" korunky (jiná želvička) a při tom nenarazila do překážky.

Vlastní hra probíhá v oblasti vymezené papírem, obě želvičky, které použijeme jsou objekty tohoto papíru (pohybují se jen v něm). Procedury potřebné pro hru jsou tentokrát napsané přímo želvičkám, které je budou vykonávat. Želvička, kterou budeme pohybovat, obsahuje proceduru pohyb:

to pohyb
if key? [make"a readkey]
if :a=-72 [setheading 0 fd 1 wait 3]
if :a=-80 [setheading 180 fd 1 wait 3]
pohyb
end
Procedura se podívá, zda je stisknuta klávesa (if key?), pokud ano, uloží její kód do proměnné a. Kód -72 má šipka nahoru, v tom případě by se příkazem setheading nastavil úhel 0, čili směr nahoru, pro šipku dolů (kód -80) by se nastavil úhel 180. Rekurzí je zajištěno neustálé opakování. Samozřejmě chybí ošetření šipek vlevo a vpravo, příkazy jsou vynechány úmyslně, z didaktických důvodů :-) .

Další procedura kontroluje srážku s druhou želvičkou nebo s překážkami, které mají červenou barvu:
to srazka
every 1[
if dotcolour="red [text1'setvalue " printtotextbox "text1 print[GAME OVER] stopall]
if overlapped=[t2] [t2'ht make"koruny :koruny+1 text1'setvalue " printtotextbox"text1 (pr :koruny "Kč) t2'pozice]
if :koruny>9 [t2'ht text1'setvalue " printtotextbox "text1 print[HOTOVO!] stopall]
]
end
K opakování je tentokrát využitý již známý příkaz every, také kontrolu barvy bodu, na kterém želvička stojí (if dotcolour), jsme již použili, stejně jako tisky do textového pole.
Novým příkazem je
if overlapped=[t2] - překrytí (srážka), v tomto konkrétním případě se díváme, jestli se želvička, v níž je tato procedura (t1), srazila s želvičkou t2 (ta má tvar mince).
Při každé srážce je proměnná koruny zvětšená o jedničku a želvička t2 si najde novou polohu. Nakonec se vše zastaví, je-li proměnná koruny větší než 9.



Projekt ulož pod názvem koruny.imp !

Úkol:

Základní úloha:

Ze složky s lekcemi si zkopíruj do své složky projekt koruny.imp (pravým tlačítkem - Uložit cíl jako..) a vyzkoušej si ho. Bohužel není úplný, podle textu v lekci doplň:
- správnou funkčnost šipek doleva a doprava
- dále doplň další překážky i jiné barvy než červené


Úloha na plus:

Doplň posuvník pro volbu obtížnosti hry (rychlost želvičky, třeba od jedné do tří).


Úloha na jedničku:

K základní úloze a úloze na plus doplň další level.